/******************************************************************************
 * Copyright (C) 2013 ShenZhen ComTop Information Technology Co.,Ltd
 * All Rights Reserved.
 * 本软件为深圳康拓普开发研制。未经本公司正式书面同意，其他任何个人、团体不得使用、
 * 复制、修改或发布本软件.
 *****************************************************************************/

package com.code.common.util;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

/**
 * 汉字转拼音工具类
 * 
 * <pre>
 * 提供根据汉字获取全拼或首字母拼写的功能
 * <strong>使用时请注意：
 * <br>1.存在多音字或方言的时候将取得所有可能情况，以“;”分隔
 * <br>2.每个返回结果之后都有分号
 * <br>3.在首字母拼写中，zh/ch/sh等都被处理为z/c/s
 * </strong>
 * </pre>
 * <br>
 * 示例：
 * <hr>
 * ChineseUtil.getFullSpell("测试拼音");// result is : ceshipinyin;ceshibingyin; (bingyin为方言)
 * ChineseUtil.getFullSpell("测试汉字");// result is : ceshihanzi; ChineseUtil.getFirstSpell("测试汉字");// result is :cshz;
 * <hr>
 * 
 * @author 陈星凌
 * @since TOP4.0
 * @version 2013-2-1 陈星凌 新建
 */
@Service
public final class ChineseUtil {
    
    /** 日志对象 */
    protected final static Logger LOGGER = LoggerFactory.getLogger(ChineseUtil.class);
    
    /** 拼音字符转化的服务对象（数据库方式） */
    @Resource
    private ChineseConvertService service;
    
    /** 辅助用的单例对象（Spring不能注入static变量，此举目的是获得service的注入，并提供static的工具类方法） */
    private static ChineseUtil instance;
    
    /**
     * 辅助用的初始化方法（Spring不能注入static变量，此举目的是获得service的注入，并提供static的工具类方法）
     */
    @PostConstruct
    void init() {
        instance = this;
        instance.service = this.service;
    }
    
    /**
     * 构造函数
     */
    private ChineseUtil() {
    }
    
    /**
     * 返回字符串的全拼的所有可能情况,仅中文汉字转化为全拼,其它字符不进行转换
     * 
     * <pre>
     * <strong>注意：
     * <br>1.存在多音字或方言的时候将取得所有可能情况，以“;”分隔
     * <br>2.每个返回结果之后都有分号
     * </pre>
     * 
     * </strong>
     * 
     * @param cnStr String 包含中文汉字的字符串
     * @return String 转换后的字符串
     */
    public static String getFullSpell(String cnStr) {
        return instance.service.getFullSpell(cnStr);
    }
    
    /**
     * 获取字符串的拼音首字母组合
     * 
     * <pre>
     *  若存在多音字或方言,会以“;”分隔每一种读音情况
     *  如“正确”，返回值为：“zq;”
     *  <br>
     *  <strong>注意：
     * <br>1.存在多音字或方言的时候将取得所有可能情况，以“;”分隔
     * <br>2.每个返回结果之后都有分号
     * <br>3.在首字母拼写中，zh/ch/sh等都被处理为z/c/s
     *  </strong>
     * </pre>
     * 
     * @param cnStr 汉字的字符串
     * @return 每个汉字拼音的第一个字母所组成的字符串
     */
    public static String getFirstSpell(String cnStr) {
        return instance.service.getFirstSpell(cnStr);
    }
    
}